/* Zatok - язык программирования текстовых игр
 * (С) 2010 - 2012 Меркулов Матвей Юрьевич
 * Код лицензирован под лицензией GNU LGPL
 * Вы можете прочитать текст лицензии по адресу:
 * http://www.gnu.org/copyleft/lesser.html
 * или прочитать русский перевод по адресу:
 * http://ru.wikisource.org/wiki/GNU_Lesser_General_Public_License
 */

package base.context;

import base.CObject;
import base.CProject;
import base.value.CValue;
import base.value.userobject.CUserObject;

public class CParameter extends CObject {
	public String Name;



	@Override
	public boolean ToBoolean() {
		return GetValue().ToBoolean();
	}



	@Override
	public int ToInt() {
		return GetValue().ToInt();
	}



	@Override
	public float ToFloat() {
		return GetValue().ToFloat();
	}



	@Override
	public String ToString() {
		return GetValue().ToString();
	}



	@Override
	public CUserObject ToObject() {
		return GetValue().ToObject();
	}



	@Override
	public CParameter ToParameter() {
		return this;
	}



	@Override
	public void EquateTo( CObject Obj ) {
		if( CProject.CurrentObject.Parameters.containsKey( this ) || CProject.CurrentContext == null ) {
			CProject.CurrentObject.Parameters.put( this, Obj.GetValue().Clone() );
		} else {
			CProject.CurrentContext.Parameters.put( this, Obj.GetValue().Clone() );
		}			
	}

	
	
	@Override
	public CValue GetValue() {
		if( CProject.CurrentObject.Parameters.containsKey( this ) ) {
			return CProject.CurrentObject.Parameters.get( this );
		} else if ( CProject.CurrentContext != null && CProject.CurrentContext.Parameters.containsKey( this ) ) {
			return CProject.CurrentContext.Parameters.get( this );
		} else {
			Error( "Параметр ''" + Name + "'' не найден" );
			return null;
		}
	}
	
	
	
	@Override
	public String toString() {
		return Name;
	}
}
